package com.qingcheng.service.impl;


import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class RestClientTest {

    @Autowired
    private RestHighLevelClient restHighLevelClient;


    @Test
    public void add() throws IOException {

        //1.连接rest接口
        HttpHost http=new  HttpHost("127.0.0.1",9200,"http");
        RestClientBuilder builder=  RestClient.builder(http);//rest构建器
        RestHighLevelClient  restHighLevelClient=new
                 RestHighLevelClient(builder);//高级客户端对象

        //2.执行添加
        IndexRequest indexRequest=new IndexRequest("sku","doc");

        Map skuMap =new HashMap();
        skuMap.put("name","华为p30pro");
        skuMap.put("brandName","华为");
        skuMap.put("categoryName","手机");
        skuMap.put("price",1010221);
        skuMap.put("createTime","2019-05-01");
        skuMap.put("saleNum",101021);
        skuMap.put("commentNum",10102321);
        Map spec=new HashMap();
        spec.put("网络制式","移动4G");
        spec.put("屏幕尺寸","5");
        skuMap.put("spec",spec);

        indexRequest.source(skuMap);

        IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        int status = response.status().getStatus();
        System.out.println(status);

    }

    @Test
    public void query() throws Exception{
        //1.连接rest接口
        HttpHost http=new HttpHost("127.0.0.1",9200,"http");
        RestClientBuilder builder= RestClient.builder(http);//rest构建器
        RestHighLevelClient restHighLevelClient=new
                RestHighLevelClient(builder);//高级客户端对象

        //2.查询   索引库
        SearchRequest searchRequest=new SearchRequest("sku");
        //2.1 找表
        searchRequest.types("doc");
        SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
        //2.2构造查询条件
       /* BoolQueryBuilder：布尔查询构建器
        TermQueryBuilder：词条查询构建器
        QueryBuilders：查询构建器工厂*/
        BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();


        MatchQueryBuilder builder1= QueryBuilders.matchQuery("name","手机");
        boolQueryBuilder.must(builder1);
        TermsQueryBuilder termsQueryBuilder=QueryBuilders.termsQuery("brandName","oppo");
        boolQueryBuilder.must(termsQueryBuilder);
        //2.3装配条件
        searchSourceBuilder.query(builder1);
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        SearchHits searchHits = response.getHits();
        long totalHits = searchHits.getTotalHits();
        System.out.println("记录数："+totalHits);
        SearchHit[] hits = searchHits.getHits();
        for(SearchHit hit:hits){
            String source = hit.getSourceAsString();
            System.out.println(source);
        }

    }
}
